//package office.word.spire.doc;
//
//import com.alibaba.fastjson.JSON;
//import com.spire.doc.*;
//import com.spire.doc.collections.BookmarkCollection;
//import com.spire.doc.documents.*;
//import com.spire.doc.fields.TextRange;
//import com.spire.doc.interfaces.IDocumentObject;
//
//import java.util.*;
//
///**
// * @author zhanglu
// *  - https://blog.csdn.net/m0_73006373/article/details/129670984?spm=1001.2101.3001.6650.2&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-129670984-blog-124213488.235%5Ev36%5Epc_relevant_default_base3&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-2-129670984-blog-124213488.235%5Ev36%5Epc_relevant_default_base3
// * @project JavaBase
// * @description
// * @date 2023/5/20 15:49
// */
//public class CreateFillableForm {
//
//    public static void main(String[] args) {
//        read();
//    }
//
//    public static void read(){
////        //创建Document对象
////        Document doc = new Document();
////
////        //加载Word文档
////        doc.loadFromFile("/Users/zhanglu/Desktop/tmp/2_1.docx");
////
////        //获取指定书签
////        BookmarksNavigator navigator = new BookmarksNavigator(doc);
////        navigator.moveToBookmark("sq03");
////
////        //获取书签内容
////        TextBodyPart textBodyPart = navigator.getBookmarkContent();
////        //创建String变量
////        String text = "";
////        //遍历书签内容的项目
////        for (Object item : textBodyPart.getBodyItems()) {
////
////            //判断项目是否为段落
////            if (item instanceof Paragraph) {
////                Paragraph paragraph = (Paragraph) item;
////
////                //遍历段落中的子对象
////                for (Object childObj : paragraph.getChildObjects()) {
////
////                    //判断子对象是否为TextRange
////                    if (childObj instanceof TextRange) {
////
////                        //获取TextRange中的文本
////                        TextRange textRange = (TextRange) childObj;
////                        text = text + textRange.getText();
////                    }
////                }
////            }
////        }
////        System.out.println(text);
//
//        Document document = new Document();
//        document.loadFromFile("/Users/zhanglu/Desktop/tmp/5.doc");
//        BookmarkCollection bookmarks = document.getBookmarks();
//        for (Object b : bookmarks) {
//            Bookmark bookmark = (Bookmark) b;
//            String key = bookmark.getName();
//            String value = "";
//            BookmarkStart bookmarkStart = bookmark.getBookmarkStart();
//            BookmarkEnd bookmarkEnd = bookmark.getBookmarkEnd();
//            IDocumentObject nextSibling = bookmarkStart.getOwnerParagraph().getNextSibling();
//            if(nextSibling instanceof Table){
//                Table table = (Table) nextSibling;
//                List<String> headers = new ArrayList<>();
//                List<Map<String, Object>> ls = new ArrayList<>();
//                for (int i = 0; i < table.getRows().getCount(); i++) {
//                    Map<String, Object> m = new LinkedHashMap<>();
//                    TableRow row = table.getRows().get(i);
//                    //遍历每行中的单元格
//                    for (int j = 0; j < row.getCells().getCount(); j++) {
//                        TableCell cell = row.getCells().get(j);
//                        String text = "";
//                        //遍历单元格中的段落
//                        for (int k = 0; k < cell.getParagraphs().getCount(); k++) {
//                            Paragraph paragraph = cell.getParagraphs().get(k);
//                            text += paragraph.getText();
//                        }
//                        if(i == 0){ //第一行：表头
//                            headers.add(text);
//                        }else { //其它行：值
//                            m.put(headers.get(j), text);
//                        }
//                    }
//                    ls.add(m);
//                }
//                System.out.println(key + "：" + JSON.toJSONString(ls));
//                System.out.println("=======================");
//                continue;
//            }
////            //判断书签是否在单元格内
////            if (((Paragraph) bookmarkEnd.getOwner()).isInCell()) {
////                // 获取书签所在的段落
////                Paragraph paragraph = (Paragraph) bookmarkEnd.getOwner();
////                // 获取段落所在的单元格
////                TableCell cell = (TableCell) paragraph.getOwner();
////                TableRow row = (TableRow) cell.getOwner();
////                value = row.getCells().get(cell.getCellIndex() - 1).getParagraphs().get(0).getText();
////            }
//            value = bookmarkEnd.getOwnerParagraph().getText();
//            System.out.println(key + "：" + value);
//            System.out.println("=======================");
//
//        }
//
//    }
//
//    public static void write(){
//        //创建文档对象
//        Document doc = new Document();
//
//        //添加一个节
//        Section section = doc.addSection();
//
//        //添加一个表格
//        Table table = section.addTable(true);
//        table.resetCells(7, 2);
//
//        //将文本添加到第一列的单元格
//        Paragraph paragraph = table.getRows().get(0).getCells().get(0).addParagraph();
//        paragraph.appendText("纯文本内容控件");
//        paragraph = table.getRows().get(1).getCells().get(0).addParagraph();
//        paragraph.appendText("富文本内容控件");
//        paragraph = table.getRows().get(2).getCells().get(0).addParagraph();
//        paragraph.appendText("图片内容控件");
//        paragraph = table.getRows().get(3).getCells().get(0).addParagraph();
//        paragraph.appendText("下拉列表内容控件");
//        paragraph = table.getRows().get(4).getCells().get(0).addParagraph();
//        paragraph.appendText("复选框内容控件");
//        paragraph = table.getRows().get(5).getCells().get(0).addParagraph();
//        paragraph.appendText("组合框内容控件");
//        paragraph = table.getRows().get(6).getCells().get(0).addParagraph();
//        paragraph.appendText("日期选择器内容控件");
//
//        //向单元格添加纯文本内容控件 (0,1)
//        paragraph = table.getRows().get(0).getCells().get(1).addParagraph();
//        StructureDocumentTagInline sdt = new StructureDocumentTagInline(doc);
//        paragraph.getChildObjects().add(sdt);
//        sdt.getSDTProperties().setSDTType(SdtType.Text);
//        sdt.getSDTProperties().setAlias("纯文本");
//        sdt.getSDTProperties().setTag("纯文本");
//        sdt.getSDTProperties().isShowingPlaceHolder(true);
//        SdtText text = new SdtText(true);
//        text.isMultiline(false);
//        sdt.getSDTProperties().setControlProperties(text);
//        TextRange tr = new TextRange(doc);
//        tr.setText("单击或点击此处输入文本。");
//        sdt.getSDTContent().getChildObjects().add(tr);
//
//        //向单元格添加富文本内容控件 (1,1)
//        paragraph = table.getRows().get(1).getCells().get(1).addParagraph();
//        sdt = new StructureDocumentTagInline(doc);
//        paragraph.getChildObjects().add(sdt);
//        sdt.getSDTProperties().setSDTType(SdtType.Rich_Text);
//        sdt.getSDTProperties().setAlias("富文本");
//        sdt.getSDTProperties().setTag("富文本");
//        sdt.getSDTProperties().isShowingPlaceHolder(true);
//        text = new SdtText(true);
//        text.isMultiline(false);
//        sdt.getSDTProperties().setControlProperties(text);
//        tr = new TextRange(doc);
//        tr.setText("单击或点击此处输入文本。");
//        sdt.getSDTContent().getChildObjects().add(tr);
//
//        //Add a picture content control to the cell (2,1)
//        paragraph = table.getRows().get(2).getCells().get(1).addParagraph();
//        sdt = new StructureDocumentTagInline(doc);
//        paragraph.getChildObjects().add(sdt);
//        sdt.getSDTProperties().setSDTType(SdtType.Picture);
//        sdt.getSDTProperties().setAlias("图片");
//        sdt.getSDTProperties().setTag("图片");
//        SdtPicture sdtPicture = new SdtPicture();
//        sdt.getSDTProperties().setControlProperties(sdtPicture);
////        DocPicture pic = new DocPicture(doc);
////        pic.loadImage("/Users/zhanglu/Desktop/luImg/1.jpg");
////        sdt.getSDTContent().getChildObjects().add(pic);
//
//        //向单元格添加下拉列表内容控件(3,1)
//        paragraph = table.getRows().get(3).getCells().get(1).addParagraph();
//        sdt = new StructureDocumentTagInline(doc);
//        sdt.getSDTProperties().setSDTType(SdtType.Drop_Down_List);
//        sdt.getSDTProperties().setAlias("下拉列表");
//        sdt.getSDTProperties().setTag("下拉列表");
//        paragraph.getChildObjects().add(sdt);
//        SdtDropDownList sddl = new SdtDropDownList();
//        sddl.getListItems().add(new SdtListItem("选择一个项目。", "1"));
//        sddl.getListItems().add(new SdtListItem("项目2", "2"));
//        sddl.getListItems().add(new SdtListItem("项目3", "3"));
//        sddl.getListItems().add(new SdtListItem("项目4", "4"));
//        sdt.getSDTProperties().setControlProperties(sddl);
//        tr = new TextRange(doc);
//        tr.setText(sddl.getListItems().get(0).getDisplayText());
//        sdt.getSDTContent().getChildObjects().add(tr);
//
//        //向单元格添加两个复选框内容控件 (4,1)
//        paragraph = table.getRows().get(4).getCells().get(1).addParagraph();
//        sdt = new StructureDocumentTagInline(doc);
//        paragraph.getChildObjects().add(sdt);
//        sdt.getSDTProperties().setSDTType(SdtType.Check_Box);
//        SdtCheckBox scb = new SdtCheckBox();
//        sdt.getSDTProperties().setControlProperties(scb);
//        tr = new TextRange(doc);
//        sdt.getChildObjects().add(tr);
//        scb.setChecked(false);
//        paragraph.appendText(" 选项 1");
//
//        paragraph = table.getRows().get(4).getCells().get(1).addParagraph();
//        sdt = new StructureDocumentTagInline(doc);
//        paragraph.getChildObjects().add(sdt);
//        sdt.getSDTProperties().setSDTType(SdtType.Check_Box);
//        scb = new SdtCheckBox();
//        sdt.getSDTProperties().setControlProperties(scb);
//        tr = new TextRange(doc);
//        sdt.getChildObjects().add(tr);
//        scb.setChecked(false);
//        paragraph.appendText(" 选项 2");
//
//        //将组合框内容控件添加到单元格 (5,1)
//        paragraph = table.getRows().get(5).getCells().get(1).addParagraph();
//        sdt = new StructureDocumentTagInline(doc);
//        paragraph.getChildObjects().add(sdt);
//        sdt.getSDTProperties().setSDTType(SdtType.Combo_Box);
//        sdt.getSDTProperties().setAlias("组合框");
//        sdt.getSDTProperties().setTag("组合框");
//        SdtComboBox cb = new SdtComboBox();
//        cb.getListItems().add(new SdtListItem("选择一个项目."));
//        cb.getListItems().add(new SdtListItem("项目 2"));
//        cb.getListItems().add(new SdtListItem("项目 3"));
//        sdt.getSDTProperties().setControlProperties(cb);
//        tr = new TextRange(doc);
//        tr.setText(cb.getListItems().get(0).getDisplayText());
//        sdt.getSDTContent().getChildObjects().add(tr);
//
//        //将日期选择器内容控件添加到单元格(6,1)
//        paragraph = table.getRows().get(6).getCells().get(1).addParagraph();
//        sdt = new StructureDocumentTagInline(doc);
//        paragraph.getChildObjects().add(sdt);
//        sdt.getSDTProperties().setSDTType(SdtType.Date_Picker);
//        sdt.getSDTProperties().setAlias("日期选择器");
//        sdt.getSDTProperties().setTag("日期选择器");
//        SdtDate date = new SdtDate();
//        date.setCalendarType(CalendarType.Default);
//        date.setDateFormat("yyyy.MM.dd");
//        date.setFullDate(new Date());
//        sdt.getSDTProperties().setControlProperties(date);
//        tr = new TextRange(doc);
//        tr.setText("单击或轻按以输入日期。");
//        sdt.getSDTContent().getChildObjects().add(tr);
//
//        //仅允许用户编辑表单域
//        doc.protect(ProtectionType.Allow_Only_Form_Fields, "permission-psd");
//
//        //Save to file
//        doc.saveToFile("/Users/zhanglu/Desktop/tmp/1.docx", FileFormat.Docx_2013);
//    }
//
//}
